package com.wolong.share.creation.prototype;

import java.util.ArrayList;
import java.util.List;

/**
 * 原型（Prototype）模式的定义如下：用一个已经创建的实例作为原型，
 * 通过复制该原型对象来创建一个和原型相同或相似的新对象。
 * 在这里，原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效，根本无须知道对象创建的细节。
 * 例如，Windows 操作系统的安装通常较耗时，如果复制就快了很多。在生活中复制的例子非常多，这里不一一列举了。
 *
 * @author wolong
 */
public class Test {
    public static void main(String[] args) {
        forNew();
        forClone();
    }

    private static void forClone() {
        List<MyPrototype> list = new ArrayList<>();
        long start = System.currentTimeMillis();
        MyPrototype myPrototype = new MyPrototype();
        for (int i = 0; i < 3000; i++) {
            try {
                list.add(myPrototype.clone());
            } catch (CloneNotSupportedException e) {
                e.printStackTrace();
            }
        }
        long end = System.currentTimeMillis();
        System.out.println((end - start) + "ms");
        System.out.println(list.get(0) == list.get(1));

    }

    private static void forNew() {
        List<MyPrototype> list = new ArrayList<>();
        long start = System.currentTimeMillis();
        for (int i = 0; i < 3000; i++) {
            list.add(new MyPrototype());
        }
        long end = System.currentTimeMillis();
        System.out.println((end - start) + "ms");
        System.out.println(list.get(0) == list.get(1));

    }


}
